package DataBase;

import Beans.Cliente;
import Beans.Pessoa;
import java.sql.*;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class ClienteDAO extends DAO {
   
       
    
    public ArrayList<Cliente> ListarTodos(String valor) throws Exception {

        Conectar();
        String SQL = "SELECT * FROM clientes c,pessoa p where nome like '%"+valor+"%' and p.cpf = c.cpf_pessoa and status='ativado' order by c.codigo";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Cliente c = null;
        ArrayList<Cliente> lista = new ArrayList<Cliente>();
        while (rs.next()) {
            c = new Cliente();
            c.setcod_Cliente(rs.getInt("codigo"));
            c.setNome(rs.getString("nome"));
            c.setCpf(rs.getString("cpf_pessoa"));
            c.setEndereco(rs.getString("endereco"));
            c.setTel1(rs.getString("tel1"));
            c.setTel2(rs.getString("tel2"));
            
            lista.add(c);
        }
        Desconectar();
        return lista;



    }
    
      public ArrayList<Cliente> ListarTodos() throws Exception {

        Conectar();
        String SQL = "SELECT * FROM clientes c,pessoa p where p.cpf = c.cpf_pessoa and status='ativado' order by c.codigo";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Cliente c = null;
        ArrayList<Cliente> lista = new ArrayList<Cliente>();
        while (rs.next()) {
            c = new Cliente();
            c.setcod_Cliente(rs.getInt("codigo"));
            c.setNome(rs.getString("nome"));
            c.setCpf(rs.getString("cpf_pessoa"));
            c.setEndereco(rs.getString("endereco"));
            c.setTel1(rs.getString("tel1"));
            c.setTel2(rs.getString("tel2"));
            
            lista.add(c);
        }
        Desconectar();
        return lista;



    }

    public Cliente pesquisa(int pesquisa) {
        try {
            Conectar();
            String SQL = "SELECT * FROM clientes c,pessoa p where c.codigo=? and c.cpf_pessoa = p.cpf";
            pstmt = con.prepareStatement(SQL);
            pstmt.setInt(1, pesquisa);
            rs = pstmt.executeQuery();


            Cliente c = null;

            if (rs.next()) {

                c = new Cliente();
                c.setcod_Cliente(rs.getInt("codigo"));
                c.setCpf(rs.getString("cpf"));
                c.setNome(rs.getString("nome"));
                c.setEndereco(rs.getString("endereco"));
                c.setTel1(rs.getString("tel1"));
                c.setTel2(rs.getString("tel2"));
                c.setStatus(rs.getString("status"));

                Desconectar();
            }
            return c;
        } catch (SQLException sqlex) {
            System.out.println("sqlex " + sqlex.getMessage());
            Cliente c = null;
            return c;
        } catch (Exception ex) {
            System.out.println(" ex aqui" + ex.getMessage());
            return new Cliente();
        }
    }

    public Cliente pesquisa(String pesquisa) {
        try {
            Conectar();
            String SQL = "SELECT * FROM clientes c,pessoa p where (nome=? or cpf=?) and c.cpf_pessoa = p.cpf";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, pesquisa);
            pstmt.setString(2, pesquisa);
            rs = pstmt.executeQuery();

            Cliente c = null;

            if (rs.next()) {
                c = new Cliente();
                c.setcod_Cliente(rs.getInt("codigo"));
                c.setCpf(rs.getString("cpf"));
                c.setNome(rs.getString("nome"));
                c.setEndereco(rs.getString("endereco"));
                c.setTel1(rs.getString("tel1"));
                c.setTel2(rs.getString("tel2"));
                c.setStatus(rs.getString("status"));
                Desconectar();

            }
            return c;
        } catch (SQLException sqlex) {
            System.out.println("sqlex " + sqlex.getMessage());
            Cliente c = new Cliente();
            c.setCpf("invalido");
            return c;
        }
    }

    public Cliente pesquisa2(String pesquisa) {
        try {
            Conectar();
            String SQL = "SELECT * FROM clientes c,pessoa p where  cpf_pessoa='"+pesquisa+"' and c.cpf_pessoa = p.cpf";
            pstmt = con.prepareStatement(SQL);
            System.out.println(pesquisa);
            rs = pstmt.executeQuery();

            Cliente c = null;

            if (rs.next()) {
                c = new Cliente();
                c.setcod_Cliente(rs.getInt("codigo"));
                c.setCpf(rs.getString("cpf"));
                c.setNome(rs.getString("nome"));
                c.setEndereco(rs.getString("endereco"));
                c.setTel1(rs.getString("tel1"));
                c.setTel2(rs.getString("tel2"));
                c.setStatus(rs.getString("status"));
                Desconectar();

            }
            return c;
        } catch (SQLException sqlex) {
            System.out.println("sqlex " + sqlex.getMessage());
            Cliente c = new Cliente();
            c.setCpf("invalido");
            return c;
        }
    }

    public boolean inserirCliente(Cliente c) {
        try {
            Conectar();
            String SQL = "select*from clientes where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, c.getCpf());
            rs = pstmt.executeQuery();
            if (rs.next()) {
                JOptionPane.showMessageDialog(null, " Cliente ja Cadastrado ");
                return false;
            } else {
                SQL = "insert into clientes (cpf_pessoa,status)values(?,?)";
                pstmt = con.prepareStatement(SQL);
                pstmt.setString(1, c.getCpf());
                pstmt.setString(2, c.getStatus());
                pstmt.executeUpdate();

                Desconectar();
                return true;
            }
        } catch (SQLException sqlex) {
            JOptionPane.showMessageDialog(null, " Exceção banco "+sqlex);
            return false;

        }
    }

    public boolean remover(Cliente c) {
        try {
            Conectar();
            String SQL = "update clientes set status='desativado' where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, c.getCpf());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (SQLException sqlex) {
            return false;
        }


    }

    public boolean alterarCliente(Cliente c) {
        try {
            Conectar();
            String SQL = "update clientes set status=? where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1,c.getStatus());
            pstmt.setString(2,c.getCpf());
            pstmt.executeUpdate();    
            return true;
        } catch (Exception ex) {
            System.out.println("Erro " + ex);
            return false;
        }

    }
    
       public boolean remover(String cpf) {
        try {
            Conectar();
            String SQL = "update clientes set status='desativado' where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, cpf);
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (SQLException sqlex) {
            return false;
        }
    }
    

    public boolean verificarCliente(String cpf) {
        try {
            Conectar();
            String SQL = "select*from pessoa p ,clientes c where c.cpf_pessoa=? and p.cpf = c.cpf_pessoa";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, cpf);
            rs = pstmt.executeQuery();
            Desconectar();
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException sqlex) {
            JOptionPane.showMessageDialog(null, "Não Foi Possivel Verificar o Cpf \n "
                    + " Erro no Banco de Dados ");
            return false;

        }
    }
}
